﻿using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using STS.Model;
using System;

namespace STS.ViewModel
{
    public class DaneLekarzyViewModel : BaseViewModel
    {
        private ObservableCollection<DaneLekarzy> _daneLekarzyItems;
        public ObservableCollection<DaneLekarzy> DaneLekarzyItems
        {
            get
            {
                if (_daneLekarzyItems == null)
                {
                    _daneLekarzyItems = new ObservableCollection<DaneLekarzy>();
                }
                return _daneLekarzyItems;
            }
            set
            {
                _daneLekarzyItems = value;
                NotifyPropertyChanged("DaneLekarzyItems");
            }
        }

        public void FindDaneLekarzyItems()
        {
            var daneLekarzyDB = from daneLekarzy in ModelInstance.DataContext.DaneLekarzyItems
                           select daneLekarzy;
            DaneLekarzyItems = new ObservableCollection<DaneLekarzy>(daneLekarzyDB);
            Debug.WriteLine("Znalazłem daneLekarzy, size = " + DaneLekarzyItems.Count);
        }

        public DaneLekarzy FindDaneLekarzyByIdDaneLekarzy(int daneLekarzyId)
        {
            var daneLekarzyDB = from daneLekarzy in ModelInstance.DataContext.DaneLekarzyItems
                           where daneLekarzy.IdLekarza == daneLekarzyId
                           select daneLekarzy;
            return daneLekarzyDB.SingleOrDefault<DaneLekarzy>();
        }

        public void UpdateDaneLekarzy(DaneLekarzy updateDaneLekarzy)
        {
            DaneLekarzy old = FindDaneLekarzyByIdDaneLekarzy(updateDaneLekarzy.IdLekarza);
            SetEntityPropertities(ref old, updateDaneLekarzy);
            SaveChangesToDB();
        }

        public void AddDaneLekarzy(DaneLekarzy daneLekarzy)
        {
            DaneLekarzy dk = FindDaneLekarzyByIdDaneLekarzy(daneLekarzy.IdLekarza);

            if (dk == null)
            {
                ModelInstance.DataContext.DaneLekarzyItems.InsertOnSubmit(daneLekarzy);
                SaveChangesToDB();
                DaneLekarzyItems.Add(daneLekarzy);
            }
        }

        public void RemoveDaneLekarzy(DaneLekarzy daneLekarzy)
        {
            DaneLekarzyItems.Remove(daneLekarzy);
            ModelInstance.DataContext.DaneLekarzyItems.DeleteOnSubmit(daneLekarzy);
            SaveChangesToDB();
        }

        public void RemoveAllDaneLekarzy()
        {
            var daneLekarzyDB = from daneLekarzy in ModelInstance.DataContext.DaneLekarzyItems
                           select daneLekarzy;

            foreach (DaneLekarzy _daneLekarzy in daneLekarzyDB)
            {
                ModelInstance.DataContext.DaneLekarzyItems.DeleteOnSubmit(_daneLekarzy);
            }

            try
            {
                SaveChangesToDB();
                DaneLekarzyItems.Clear();
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }
        }

    }
}
